package Calculadora.Stack.StackList;

/**
 * Elementos de una lista con enlace simple
 * @param <E>  clase generica
 * @author Vinicio Gomez
 * @since 12/08/2012
 * @version 1.0
 */
public class SinglyLinkedListElement<E>{ 
    /**El dato almacenado*/
    protected E data;
    /**En enlace al siguiente elemento*/
    protected SinglyLinkedListElement nextData;

    /**
     * Constructor
     * @pre data es el dato a almacenar, nextData es la referencia a el siguiente objeto
     * @post Se crea una nueva cabeza en la lista
     * @param data el dato a almacenar en la lista
     * @param nextData La referencia al siguiente objeto en la lista
     * @since 12/08/2012
     * @see SinglyLinkedList
     */
    public SinglyLinkedListElement(E data, SinglyLinkedListElement nextData){
	this.data = data;
	this.nextData = nextData;
    }

    /**
     * Constructs
     * @pre data es la informacion a alamacenar, no tiene referencia a otro objeto
     * @post construye una nueva cola para la lista
     * @param data en dato a almacenar en la lista
     * @since 12/08/2012
     * @see singlyLinkedList
     */
    public SinglyLinkedListElement(E data){
	this(data,null);
    }

    /**
     * Se obtiene la referendcia al siguiente objeto de la lista
     * @return la referencia al siguiente objeto de la lista
     * @pre n/a. Sera null en caso sea el ultimo
     * @post se retorna la referencia al siguiente objeto de la lista
     * @since 12/08/2012
     * @see singlyLinkedList
     */
    public SinglyLinkedListElement next(){
	return nextData;
    }
    
    /**
     * Se obtiene el objeto almacenado al inicio de la lista
     * @return La referencia al objeto almacenado en la lista
     * @pre que la lista no este vacia
     * @post se retorna la referencia al primer objeto de la lista
     * @since 12/08/2012
     * @see SinglyLinkedList
     */
    public E value(){
	return data;
    }
    
    /**
     * Actualiza cual es el siguiente elemento
     * @param nextData la nueva referencia al objeto que es el primer elemento
     * @pre n/a
     * @post sets reference to new next value
     * @since 12/08/2012
     * @see singlyLinkedList
     */
    public void setNext(SinglyLinkedListElement nextData)
    {
	this.nextData = nextData;
    }
}

